package com.labot.webapp.action;



import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.springframework.security.core.context.SecurityContextHolder;

import com.labot.model.Area;
import com.labot.model.Centro;
import com.labot.model.ClasificacionMuestra;
import com.labot.model.PedidoNoConforme;
import com.labot.model.PedidoNoConformeBitacora;
import com.labot.model.User;
import com.labot.types.BitacoraEventType;
import com.labot.types.EstadoPNMType;
import com.labot.types.ReclamoType;
import com.labot.types.SiNoType;


/**
 * Action for facilitating User Management feature.
 */
public class RecepcionAction extends BaseAction {
    private static final long serialVersionUID = 6776548938712115191L;
    
    private List<PedidoNoConforme> listaavisados = new ArrayList<PedidoNoConforme>();
    private Set<Area> areas = new HashSet<Area>();
    private Set<PedidoNoConformeBitacora> bitacoras;
    
    private SiNoType[] sino = SiNoType.values();
    private String vino;
    
    
    private Long idpedidonoconforme;
    private PedidoNoConforme pedidonoconforme;
    private User logeado;
    private String comentario;
    private String nuevoprotocolo;
    
    
    public String list(){
    	
    	listaavisados = pedidonoconformeManager.getNuevaMuestrasAvisado();
    	
    	return SUCCESS;
    	
    }
    
    public String verPedidoRecepcion(){
    	
    	pedidonoconforme = pedidonoconformeManager.buscarNuevaMuestra(idpedidonoconforme);
    	areas = pedidonoconforme.getAreasnotificadas();
    	areas.removeAll(pedidonoconforme.getAreas());
    	logeado = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
    	bitacoras = pedidonoconforme.getBitacorasFirmas();
    	return SUCCESS;
    	
    	
    }
    
    public String cerrarPedido(){
    	
    	try{
			if (vino == null || vino.equals("-1")) {
				super.addActionError("Debe indicar si vino el paciente!");
				return ERROR;
			}
			pedidonoconforme = pedidonoconformeManager.buscarNuevaMuestra(idpedidonoconforme);
			PedidoNoConformeBitacora b = new PedidoNoConformeBitacora();
			b.setFecha(new Date());
			b.setEvento(BitacoraEventType.RECEPCION);
			b.setDescripcion("<strong>ESTADO: " + EstadoPNMType.CERRADO + " -></strong> " + comentario);
			b.setUsername(SecurityContextHolder.getContext().getAuthentication().getName());
			pedidonoconforme.agregarBitacora(b);
			pedidonoconformeManager.save(pedidonoconforme);
			PedidoNoConformeBitacora a = new PedidoNoConformeBitacora();
			a.setFecha(new Date());
			a.setEvento(BitacoraEventType.CIERRE);
			a.setDescripcion("<strong>ESTADO: " + EstadoPNMType.CERRADO + " -></strong> Pedido terminado.");
			a.setUsername("SISTEMA");
			pedidonoconforme.agregarBitacora(a);
			pedidonoconforme.setEstadopnm(EstadoPNMType.CERRADO);
			if (vino.equals("SI")) {
				pedidonoconforme.setNuevoprotocolo(nuevoprotocolo);
			}
			pedidonoconformeManager.save(pedidonoconforme);
		} catch (Exception e) {
			super.addActionError("Error al cerrar el pedido!");
			return ERROR;
		}
		super.addActionMessage("Se cerro el pedido!");
		return SUCCESS;
    }
    
    
    

	public List<PedidoNoConforme> getListaavisados() {
		return listaavisados;
	}

	public void setListaavisados(List<PedidoNoConforme> listaavisados) {
		this.listaavisados = listaavisados;
	}

	public Set<Area> getAreas() {
		return areas;
	}

	public void setAreas(Set<Area> areas) {
		this.areas = areas;
	}

	public Set<PedidoNoConformeBitacora> getBitacoras() {
		return bitacoras;
	}

	public void setBitacoras(Set<PedidoNoConformeBitacora> bitacoras) {
		this.bitacoras = bitacoras;
	}

	public Long getIdpedidonoconforme() {
		return idpedidonoconforme;
	}

	public void setIdpedidonoconforme(Long idpedidonoconforme) {
		this.idpedidonoconforme = idpedidonoconforme;
	}
	
	

	public PedidoNoConforme getPedidonoconforme() {
		return pedidonoconforme;
	}

	public void setPedidonoconforme(PedidoNoConforme pedidonoconforme) {
		this.pedidonoconforme = pedidonoconforme;
	}

	public User getLogeado() {
		return logeado;
	}

	public void setLogeado(User logeado) {
		this.logeado = logeado;
	}

	public String getComentario() {
		return comentario;
	}

	public void setComentario(String comentario) {
		this.comentario = comentario;
	}

	public String getNuevoprotocolo() {
		return nuevoprotocolo;
	}

	public void setNuevoprotocolo(String nuevoprotocolo) {
		this.nuevoprotocolo = nuevoprotocolo;
	}

	public SiNoType[] getSino() {
		return sino;
	}

	public void setSino(SiNoType[] sino) {
		this.sino = sino;
	}

	public String getVino() {
		return vino;
	}

	public void setVino(String vino) {
		this.vino = vino;
	}
    
	
    
   
	

	
	

}
